package com.ytjj.qmyx.admin.service.channelProductService;

import com.ytjj.common.api.CommonResult;
import com.ytjj.qmyx.admin.model.ProductSelectDetailResponse;
import com.ytjj.qmyx.admin.model.PutOutProductResp;
import com.ytjj.qmyx.admin.model.SalesChannelsManagement;
import com.ytjj.qmyx.admin.model.request.ProductCategoryRequest;
import com.ytjj.qmyx.admin.model.request.ProductChannelRequest;
import com.ytjj.qmyx.admin.model.request.ProductRequest;
import com.ytjj.qmyx.admin.model.request.channel.ChannelProductSelectRequest;
import com.ytjj.qmyx.admin.model.response.AreaChannelsManagementResponse;
import com.ytjj.qmyx.admin.model.response.AreaProductChannelResponse;
import com.ytjj.qmyx.admin.model.response.ProductChannelResponse;
import com.ytjj.qmyx.mall.model.Product;
import com.ytjj.qmyx.mall.model.ProductCategory;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

public interface ChannelProductService {

    CommonResult productChannelList(ProductChannelRequest request);

    List<ProductChannelResponse> productChannelListForArea(ProductChannelRequest request);

    /**
     * 地区销售渠道所有商品
     */
    CommonResult areaProductChannelList(ProductChannelRequest request);

    CommonResult removeProduct(Integer productChannelId);

    CommonResult removeProductFromArea(Integer productChannelId,Integer isMain);

    boolean checkIsLimitRole();

    CommonResult removeH5Product(Integer productChannelId);

    CommonResult getProductChannelInfo(Integer productId);

    /**
     * 根据当前渠道商品id上架
     */
    CommonResult putOutChannelProduct(Integer productChannelId, Integer status, String outRemarks);

    /**
     * 根据当前渠道商品id集合上架
     */
    PutOutProductResp batchPutOutChannelProduct(List<Product> products,Integer status);

    /**
     * 获得供应链所有分类
     * @param :
     * @returns: java.util.List<com.ytjj.qmyx.mall.model.ProductCategory>
     * 
     */
    List<ProductCategory> getAllProductCategorys();

    /**
     * 分页查询一级分类
     * @param :
     * @returns: java.util.List<com.ytjj.qmyx.mall.model.ProductCategory>
     * 
     */
    CommonResult getParentList(ProductCategoryRequest pcRequest);


    /**
     * 根据1级分类查询对应的分类信息
     * @param pcRequest:
     * @returns: com.ytjj.common.api.CommonResult
     * 
     */
    CommonResult getChildrensById(ProductCategoryRequest pcRequest);

    /**
     * 获取三级分类列表
     *
     *
     * @return
     */
    CommonResult  getBottomCategoryList(@RequestBody ProductCategoryRequest productCategoryRequest);


    CommonResult findProduceSelect(ChannelProductSelectRequest productRequest);

    /**
     * 调用供应商接口获取商品信息
     * @param productId:
     * @returns: com.ytjj.qmyx.admin.model.ProductSelectDetailResponse
     * 
     */
    ProductSelectDetailResponse findProductSelectDetail(Integer productId);

    /**
     * 保存勾选的商品入库(非地区销售渠道)
     * @param ids:
     * @returns: boolean
     * 
     */
    boolean saveSelectedProducts(List<Integer> ids, String platformData,String shopId,List<String> provinceCodes);

    /**
     * 保存勾选的商品入库(非地区销售渠道)
     * @param ids:商品id
     * @param provinceCodes:省份code
     *
     */
    boolean selectAndAddToProvince(List<Integer> ids,String shopId,List<String> provinceCodes);

    /**
     * 获取商品投放的地区
     * @param id:商品id
     * @param flag:1-一键上架标志 2-一键下架标志
     */
    List<SalesChannelsManagement> getProvinceByProductId(Integer id,Integer flag);

    /**
     * 更新商品信息(为供应链提供)
     * @param supplyProductId: 供应链商品Id
     * @param platformData: 渠道类型 app 和 h5
     * @returns: boolean
     * 
     */
    boolean updateproductDetail(Integer supplyProductId,String platformData);

    /**
     * 商品分页查询
     * @param :
     * @returns: com.ytjj.common.api.CommonResult
     * 
     */
    CommonResult getProductPageList(ProductRequest product);

    /**
     * 添加分类
     * @param productCategory:
     * @returns: int
     * 
     */
    CommonResult create(ProductCategory productCategory);



    /**
     * 更新分类
     * @param productCategory:
     * @returns: int
     * 
     */
    CommonResult update(ProductCategory productCategory);

    /**
     * 删除分类
     * @param id:
     * @returns: int
     * 
     */
    CommonResult delete(Integer id);

    /**
     * 手动同步商品分类
     * @param :
     * @returns: int
     * 
     */
    void refreshProductCategory();

    /**
     * 判断供应链商品状态
     * @param channelProduct
     */
    void getSupplyProductStatus(Product channelProduct);

    List<Integer> getProductIds(Integer subjectId, Integer labelId, String platformData);

    List<Integer> getSupplyProductIds(Integer supplyProductLabelId);

    /**
     * 根据供应链id和平台获取商品
     */
    List<Product> queryBySupplyIdAndPlatformData(List<Integer> supplyProductIds,List<String> platformData);

    /**
     * 获取所有地区的销售渠道
     */
    List<SalesChannelsManagement> getAllSalesChannels(SalesChannelsManagement request);

    /**
     * 获取所有启用的销售渠道
     * @param status 状态  0-未启用 1-已启用
     * @return List<AreaChannelsManagementResponse>
     */
    AreaChannelsManagementResponse getSalesChannelsManagement(Integer status);

    /**
     * 新增或者更新地区销售渠道-地区
     */
    Integer addOrUpdateArea(SalesChannelsManagement request);

    /**
     * 复制商品
     * @param id
     * @return
     */
    Integer copyProduct(Integer id);
}
